class Respuesta < ActiveRecord::Base
  belongs_to :pregunta
  belongs_to :usuario
  belongs_to :evaluado, :class_name => "Usuario", :foreign_key => :evaluado_id
  validates_uniqueness_of :pregunta_id, :scope => [:evaluado_id, :usuario_id]
  validates_presence_of :comentario, :if => Proc.new {|respuesta|
    respuesta.valor == Pregunta.find(respuesta.pregunta_id).peor_opcion
  }, :message => "Evaluacion como NUNCA, justificar evaluacion"

  validates_presence_of :valor, :message => "Debe responder todas las respuestas"

  named_scope :evaluado, lambda {|usuario_evaluado_id| {:conditions => ['evaluado_id = ?', usuario_evaluado_id]}}
  named_scope :evaluador, lambda {|evaluador_id| {:conditions => ['usuario_id = ?', evaluador_id]}}
  named_scope :por_evaluadores_ids, lambda {|evaluadores_ids| {:conditions => ['usuario_id IN (?)', evaluadores_ids]}}
  named_scope :tipo, lambda {|tipo| {:conditions => ['tipo_evaluado = ?', tipo]}}
  named_scope :por_evaluacion_y_evaluado, lambda {|evaluacion,evaluado| {:conditions => ['evaluado_id = ? and pregunta_id IN (?)', evaluado.id, evaluado.preguntas.por_evaluacion(evaluacion).map(&:id)]}}
  def self.por_evaluado(evaluado_id)
    find(:first, :conditions => ['evaluado_id = ?', evaluado_id])
  end

  def usuario_evaluado
    Usuario.find self.evaluado_id
  end

  def opcion_elegida
    self.pregunta.opciones.find(:first, :conditions => ['valor = ?', self.valor])
  end

  def tipo_evaluador
    case tipo_evaluado
    when "subordinado"
      "superior"
    when "superior"
      "subordinado"
    else
      if evaluado_id == usuario_id
        "autoevaluacion"
      else
        "par"
      end
    end
  end

  def usuario_y_evaluado
      "#{usuario_id}-#{evaluado_id}"
   end

end
